﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using GSQ.BusinessEntities;
using GSQ.DataAccess.DataSetTableAdapters;

namespace GSQ.DataAccess
{
    public class OriginalesDA
    {
        private ORIGINALESTableAdapter Adapter = new ORIGINALESTableAdapter();
        private V_ORIGINALESTableAdapter vAdapter = new V_ORIGINALESTableAdapter();
        private DataSet.ORIGINALESDataTable entities;
        private DataSet.ORIGINALESRow entity;

        public decimal Insert(ORIGINALES value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    SqlTransaction tr = cnn.BeginTransaction();
                    Adapter.Connection = cnn;
                    Adapter.Transaction = tr;

                    entities = new DataSet.ORIGINALESDataTable();

                    entity = entities.NewORIGINALESRow();

                    entity.ID = value.ID;
                    entity.NRO_ORIGINAL = value.NRO_ORIGINAL.Trim();
                    entity.ID_CATEGORIA = value.ID_CATEGORIA;
                    entity.ID_DESCRIPCION = value.ID_DESCRIPCION;
                    if (value.COMENTARIO != null && value.COMENTARIO.Trim() != string.Empty)
                        entity.COMENTARIO = value.COMENTARIO;

                    entities.AddORIGINALESRow(entity);
                    try
                    {
                        Adapter.Update(entities);
                        value.ID = entity.ID;
                        ORIGINALES_ADICIONALESTableAdapter adapterA = new ORIGINALES_ADICIONALESTableAdapter();
                        adapterA.Connection = cnn;
                        adapterA.Transaction = tr;
                        adapterA.Insert(0, value.NRO_ORIGINAL, value.ID, value.DEPARTAMENTOS.ID);

                    }
                    catch (Exception ex)
                    {
                        tr.Rollback();
                        throw ex;
                    }
                    tr.Commit();
                    return value.ID;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public decimal Update(ORIGINALES value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    SqlTransaction tr = cnn.BeginTransaction();
                    Adapter.Connection = cnn;
                    Adapter.Transaction = tr;

                    entities = Adapter.GetDataByID(value.ID);
                    entity = entities.FirstOrDefault();

                    vAdapter.Connection = cnn;
                    vAdapter.Transaction = tr;
                    try
                    {
                        DataSet.V_ORIGINALESRow vOriginalesRW = vAdapter.GetDataByID(entity.ID).FirstOrDefault();

                        if (value.NRO_ORIGINAL != vOriginalesRW.NRO_ORIGINAL || value.DEPARTAMENTOS.ID != vOriginalesRW.ID_DEPARTAMENTO)
                        {
                            ORIGINALES_ADICIONALESTableAdapter adapOA = new ORIGINALES_ADICIONALESTableAdapter();
                            adapOA.Connection = cnn;
                            adapOA.Transaction = tr;

                            DataSet.ORIGINALES_ADICIONALESRow rwOA = adapOA.GetDataByIdOriginalNroOriginal(vOriginalesRW.NRO_ORIGINAL, vOriginalesRW.ID).FirstOrDefault();
                            rwOA.NRO_ADICIONAL = value.NRO_ORIGINAL;
                            rwOA.ID_DEPARTAMENTO = value.DEPARTAMENTOS.ID;

                            adapOA.Update(rwOA);
                        }

                        entity.NRO_ORIGINAL = value.NRO_ORIGINAL.Trim();
                        entity.ID_CATEGORIA = value.ID_CATEGORIA;
                        entity.ID_DESCRIPCION = value.ID_DESCRIPCION;
                        if (value.COMENTARIO != null  && value.COMENTARIO.Trim() != string.Empty)
                            entity.COMENTARIO = value.COMENTARIO;

                        Adapter.Update(entities);
                    }
                    catch (Exception ex)
                    {
                        tr.Rollback();
                        throw ex;
                    }
                    tr.Commit();
                    return value.ID;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public ORIGINALES GetById(decimal id)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;

                    DataSet.V_ORIGINALESRow rw = vAdapter.GetDataByID(id).FirstOrDefault();
                    ORIGINALES original = null;
                    if (rw != null)
                    {
                        original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                    }
                    return original;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public ORIGINALES GetByNroOriginal(string value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;

                    DataSet.V_ORIGINALESRow rw = vAdapter.GetDataByNroOriginal(value.Trim()).FirstOrDefault();
                    ORIGINALES original = null;
                    if (rw != null)
                    {
                        original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                    }
                    return original;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public List<ORIGINALES> GetAll()
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;
                    List<ORIGINALES> list = new List<ORIGINALES>();
                    foreach (DataSet.V_ORIGINALESRow rw in vAdapter.GetData())
                    {
                        ORIGINALES original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                        list.Add(original);
                    }
                    return list;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public List<ORIGINALES> GetByDescripcion(string value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;
                    List<ORIGINALES> list = new List<ORIGINALES>();
                    foreach (DataSet.V_ORIGINALESRow rw in vAdapter.GetDataByDescripcion(value.Trim()))
                    {
                        ORIGINALES original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                        list.Add(original);
                    }
                    return list;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public List<ORIGINALES> GetByDescripcion(decimal value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;
                    List<ORIGINALES> list = new List<ORIGINALES>();
                    foreach (DataSet.V_ORIGINALESRow rw in vAdapter.GetDataByIdDescripcion(value))
                    {
                        ORIGINALES original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                        list.Add(original);
                    }
                    return list;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public List<ORIGINALES> GetByCategoria(string value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;
                    List<ORIGINALES> list = new List<ORIGINALES>();
                    foreach (DataSet.V_ORIGINALESRow rw in vAdapter.GetDataByCategoria(value.Trim()))
                    {
                        ORIGINALES original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                        list.Add(original);
                    }
                    return list;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public List<ORIGINALES> GetByIdCategoria(decimal value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;
                    List<ORIGINALES> list = new List<ORIGINALES>();
                    foreach (DataSet.V_ORIGINALESRow rw in vAdapter.GetDataByIdCategoria(value))
                    {
                        ORIGINALES original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                        list.Add(original);
                    }
                    return list;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public List<ORIGINALES> GetByDepartamento(string value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;
                    List<ORIGINALES> list = new List<ORIGINALES>();
                    foreach (DataSet.V_ORIGINALESRow rw in vAdapter.GetDataByDepartamento(value.Trim()))
                    {
                        ORIGINALES original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                        list.Add(original);
                    }
                    return list;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }

        public List<ORIGINALES> GetByIdDepartamento(decimal value)
        {
            using (SqlConnection cnn = new SqlConnection(Connection.GetConnectionString))
            {
                try
                {
                    cnn.Open();
                    this.vAdapter.Connection = cnn;
                    List<ORIGINALES> list = new List<ORIGINALES>();
                    foreach (DataSet.V_ORIGINALESRow rw in vAdapter.GetDataByIdDepartamento(value))
                    {
                        ORIGINALES original = new ORIGINALES();
                        original.ID = rw.ID;
                        original.NRO_ORIGINAL = rw.NRO_ORIGINAL;
                        original.ID_DESCRIPCION = rw.ID_DESCRIPCION;
                        original.DESCRIPCIONES = new DESCRIPCIONES { ID = rw.ID_DESCRIPCION, DESCRIPCION = rw.DESCRIPCION };
                        original.ID_CATEGORIA = rw.ID_CATEGORIA;
                        original.CATEGORIAS = new CATEGORIAS { ID = rw.ID_CATEGORIA, CATEGORIA = rw.CATEGORIA };
                        if (!rw.IsFECHA_CREACIONNull())
                            original.FECHA_CREACION = rw.FECHA_CREACION;
                        if (!rw.IsCOMENTARIONull())
                            original.COMENTARIO = rw.COMENTARIO;
                        original.DEPARTAMENTOS = new DEPARTAMENTOS { ID = rw.ID_DEPARTAMENTO, DEPARTAMENTO = rw.DEPARTAMENTO };
                        list.Add(original);
                    }
                    return list;
                }
                finally
                {
                    if (cnn.State != System.Data.ConnectionState.Closed)
                        cnn.Close();
                }
            }
        }
    }
}
